console.log("nodemon doing....");
// 一.作用域：某个成员能够起作用的范围
// es6之前作用域分为两类：全局作用域和函数作用域
// es4新增：块级作用域
// 1.let：新增变量定义，用于块级作用域
// //eg：
// if (true) {
//     var a = 'aaa'   //全局变量
//     let b = 'bbb' //es6定义
// }

// console.log(a); //aaa
// console.log(b); //b is not defined
/****************************************/
// let解决了循环嵌套计数器同名导致参数赋值问题
////eg:
// for (var a = 0; a < 3; a++) {
//     for (var a = 0; a < 3; a++) {
//         console.log(a);
//     }
//     console.log('内层结束：a=', a);
// }
// for (let a = 0; a < 3; a++) {
//     for (let a = 0; a < 3; a++) {
//         console.log(a);
//     }
//     console.log('内层结束：a=', a);
// }
/****************************************/

// 解决循环事件绑定的变量提升问题
// //eg:
// var elements = [{}, {}, {}]
// for (var i = 0; i < elements.length; i++) {
//     elements[i].onclick = function() {
//         console.log(i);
//     }
// }

// elements[0].onclick() //3
// elements[2].onclick() //3

// var elements = [{}, {}, {}]
// for (var i = 0; i < elements.length; i++) {
//     // 利用闭包机制，拿到外部变量
//     elements[i].onclick = (function(i) { //iife函数
//         return function() { //es6之前封装函数作用域解决变量提升
//             console.log(i);
//         }
//     })(i)
// }

// elements[0].onclick() //0
// elements[2].onclick() //2

// var elements = [{}, {}, {}]
// for (let i = 0; i < elements.length; i++) { //es6新增let计数器定义跨级作用域解决变量提升
//     elements[i].onclick = function() {
//         console.log(i);
//     }
// }

// elements[0].onclick() //0
// elements[2].onclick() //2

/****************************************/

// let for循环机制：定义内部变量并赋值
// for (let i = 0; i < 3; i++) {
//     console.log('foo');
// }

// let i = 0;
// if (i < 3) {
//     let i = 'foo' //定义的是内部的i，而非外部的i变量
//     console.log(i);
// }
// i++
// if (i < 3) {
//     let i = 'foo'
//     console.log(i);
// }
// i++
// if (i < 3) {
//     let i = 'foo'
//     console.log(i);
// }


/****************************************/

// let 解决var的变量提升问题
// console.log(foo); //undefined  说明此变量已申明但是没有赋值
// var foo = 'foo'

// console.log(foo);  //ReferenceError: Cannot access 'foo' before initialization
// let foo = 'foo'  

/****************************************/